package com.fenghongzhang.kotlin1903.plus

import kotlinx.coroutines.*

fun main(){

    //不阻塞
//    GlobalScope.launch {
//        println(1111)
//    }
//
//    Thread.sleep(1000)

    //阻塞 -----
//    runBlocking {
//        println(11111)

    // -----
//        repeat(10000){
//            launch {
//                println("---")
//            }
//        }

    //-------
//        launch {
    //-----------
//            delay(100)
//            println(22222)
//        }
//
    //---------
//        launch {
//            delay(200)
//            println(33333)
//        }

//        show()
//    }

    //--------
//    var job = Job()
//    val coroutineScope = CoroutineScope(job)
//    coroutineScope.launch {
//        println(11111)
//    }
//    coroutineScope.launch {
//        println(22222)
//    }
//    job.cancel()
//
//    println(44444)


    runBlocking {

        //没有返回值
//        launch {
//            1+1
//        }

        //有一个返回值的协程
//        val adf = async {
//            1 + 1
//        }
//        val await = adf.await()
//        println(await)

        //合并写
//        val await = async {
//            1 + 1
//        }.await()

        //withContext
//        val await = withContext(Dispatchers.IO) {
//            1 + 1
//        }
//        println(await)



        //协程的并行和串行
        var start = System.currentTimeMillis()


        //串行
//        var a = async {
//            delay(1000)
//            1 + 1
//        }.await()

        //并行
        var a = async {
            delay(1000)
            1 + 1
        }

        var b = async {
            delay(1000)
            1 + 1
        }

        println(a.await()+b.await()) //4
        val stop = System.currentTimeMillis()

        println(stop-start)
    }



}

//--------
suspend fun show(){

    coroutineScope {
        launch {

        }
        launch {

        }
        launch {

        }
        launch {

        }
    }


}